package web;

import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;

import org.apache.wicket.markup.html.basic.Label;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import persistence.produitcatalogue.ProduitCatalogue;
import persistence.util.HibernateUtil;
import web.description.DescriptionProduit;

public class HomePage extends Template {

	/**
	 * Titre de la page
	 */
	protected String sousTitre; 
	protected String annonceAccueil;
	private static final String VALEUR_ANNONCE = "Vous devez vous connecter pour faire des achats.";
	private ListView<ProduitCatalogue> listeProduits;

	private static final long serialVersionUID = 1L;

	public HomePage(String sousTitre) 
	{
		super();
		this.sousTitre = sousTitre;
		add(new Label("sousTitre", sousTitre));
		Label label = new Label("annonce", VALEUR_ANNONCE); 
		add(label);
		label.setVisible(getMySession().getUtilisateur() == null);
		List listProduits = getAllVisibleProducts();
		
		listeProduits = new ListView<ProduitCatalogue>("listeproduits", listProduits)
		{
			AjaxLink<Object> lienProduit;
			
			public void populateItem(ListItem item)
			{		
				final ProduitCatalogue currentProduct = (ProduitCatalogue) item.getModelObject();
				lienProduit = new AjaxLink<Object>("lienproduit")
				{
					public void onClick(AjaxRequestTarget target)
					{
						setResponsePage(new DescriptionProduit(currentProduct));
					}
				};
				
				lienProduit.add(new Label("libelle", currentProduct.getLibelle()));
				item.add(lienProduit);
				item.add(new Label("nomfournisseur", currentProduct.getMarque().getLibelle()));
				Label prix = new Label("prixtest", "Prix : "+currentProduct.getPrix()+"€");
				item.add(prix);
				item.add(new Label("stock", "En stock "+currentProduct.getStockProduit()));
				item.add(new Label("stockage", "Mémoire :"+currentProduct.getStockage().getLibelle()));
			}
		};
		add(listeProduits);
	}

	public List getAllVisibleProducts()
	{
		SessionFactory sf = HibernateUtil.getSessionFactory();
		Session session = sf.openSession();
		Transaction t = session.beginTransaction();
		Query query = session.createQuery("Select p from ProduitCatalogue p where visibilite = :code");
		query.setParameter("code", 1);
		t.commit();
		List l = query.list();
		session.close();
		return l;
	}
}
